dbtの”Analyses and Seeds”コースを受講してみた
はじめに
データアナリティクス事業本部のおざわです。 いよいよバスケのBリーグ2023-24シーズンが開幕ですね!
今回もdbt公式の入門コースの中から1つ試してみたので共有します。
コース概要
本コースは、Beginnerカテゴリに分類されており、初心者向けのコースになっています。ボリューム的には、前回までに受講した2つのコース("dbt Fundamentals", "Jinja, Macros, Packages")と比較するとかなり軽めになっています。所要時間としては、字幕ありの15分の動画と30分ほどのハンズオンとなっています。
各章メモ
1. What are analyses?
Analysesは、プロジェクトのanalyses
フォルダにあるSQLファイルです。Jinjaも使えるのでdbt compile
でコンパイルできます。ただ、このSQLファイルはモデルでもなく、テストでもありません(?)ではなんなのか?
プロジェクトや開発者によって異なりますが、学習目的でJinjaを使ったSQLがコンパイルされた結果どうなるのか確認したり、既存のモデルをリファクタリングする際の動作確認をしたり、という使い方をするようです。
Analysesについては、こちらの記事もご参照ください。
2. What are seeds?
Seedsは、dbtプロジェクトのseeds
フォルダ(※)にあるCSVファイルのことです。このフォルダにCSVファイルを置いてdbt seed
コマンドを実行すると、CSVの内容をテーブルにロードしてくれます。テーブルを参照するには、モデルを呼び出すときと同じようにref
関数を使用します。
seedsの対象になるデータは、変更が頻繁なデータや大規模なデータではなく、国コードのようにあまり変化がない小規模なデータということでした。
※dbt 1.0.0より前のバージョンではdata
というフォルダ名でした。
3. Implementing Analysis
1章で知った内容を実際にdbt Cloudで試します。
ここで、AnalysesにあるSQLと普通のモデルとの違いを説明されてようやく少し腹落ちしました。モデルとの違いは、analysisはマテリアライズ(テーブル、ビュー化)されないという点です。ただマクロなどは普通のモデルと同じように使えるので、analyses
フォルダにSQL置いていろいろ試せちゃうよ、ということかなと理解しました。
analyses
のSQLファイルがコンパイルされるとcompiled
フォルダに出力されます。
4. Implementing Seeds
本章ではseeds
フォルダの下に実際にseedを作っていきます。employees.csv
の拡張子を除いたファイル名がテーブル名と対応しています。この場合はemployees
テーブルが作成されます。CSVを作成してからdbt seed
コマンドを実行すると、dbtがCSVを読み込んでDWHにテーブルを作成してくれます。
データ型はどうやって決まるの?と不思議に思ったのですが、データ型についてはdbtがCSVから勝手に推測してくれます。必要であれば以下のようにプロジェクトの設定ファイルで明示的に指定することも可能です。
# dbt_project.yml seeds: jaffle_shop: # you must include the project name warehouse_locations: +column_types: zipcode: varchar(5)
seedもモデルと同様、YAMLでテストやドキュメントを書くことができます。
# seeds/schema.yml version: 2 seeds: - name: country_codes description: A mapping of two letter country codes to country names columns: - name: country_code tests: - unique - not_null - name: country_name tests: - unique - not_null
seedのテーブルを参照するには、他のモデルと同じようにref関数を使います。また、テストする時は、モデルのときと同様のコマンドを実行します。
dbt test --models employees
おわりに
短めのコースでしたが、いままでなんだかよくわからなかったanalysesとseedsについて知ることができました。引き続き公式のdbtコースを受講してみたいと思います。